package com.doctor.utils.callback.notify;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * Created by nieyunlong
 * on 2016/8/23.
 */
public class CommonObservable<T extends Observer> extends Observable<T> {
    private static CommonObservable commonObservable;

    public synchronized static CommonObservable getInstance() {
        if (commonObservable == null) {
            commonObservable = new CommonObservable();
        }
        return commonObservable;
    }

    /* 实现抽象方法通知观察者， 第一个参数为观察者名字，第二个参数flag标志表示如果没有找到观察者是否通知其他所有观察者（true是false否），第三个为需要传递的参数 */
    @Override
    public void notifyObserver(String obserName, boolean flag, Object... objs) {
        if (obserName != null && !(obserName instanceof String)) return;
        for (HashMap<String, T> map : obserList) {
            if (map.containsKey(obserName)) {
                ((T) map.get(obserName)).update(objs);
                break;
            }
        }
        if (flag) {
            for (HashMap<String, T> map : obserList) {
                Iterator<Map.Entry<String, T>> iterator = map.entrySet().iterator();
                ((T) iterator.next().getValue()).update(objs);
            }
        }
    }
}
